热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

传统|印记_消息中间件概述

篇首语:本文由编程笔记#小编为大家整理,主要介绍了消息中间件概述相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了消息中间件概述相关的知识,希望对你有一定的参考价值。






✨ 消息中间件概述


  • 学习消息队列的原因
  • 消息中间件概述
  • 消息队列应用场景
    • 消息中间件主要作用
    • 应用解耦
    • 异步处理
    • 流量削峰(削峰填谷)
    • QPS,PV,UV,PR概念

  • AMQP和JMS
  • 消息队列产品
  • RabbitMQ核心概念 架构原理




📃个人主页:不断前进的皮卡丘


🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记


🔥个人专栏:消息中间件专栏


学习消息队列的原因

📖在电子商务应用中,我们经常需要对庞大的数据进行监控,MQ的使用与日俱增,特别是RabbitMQ在分布式系统中存储转发消息,可以保证数据不丢失,也可以保证高可用性,即集群的时候部分机器宕机可以继续执行。在大型电子商务类网址,比如京东、淘宝等网址有着深入的应用。
🔥队列可以消除高并发访问高峰,加快网站的响应速度。
👀在不适用消息队列的情况,用户的请求直接写入数据库,在高并发的情况会对数据库造成巨大的压力,同时也会导致系统响应延迟加剧。



消息中间件概述
  • MQ(Message Queue),消息队列(MQ)是一种应用程序对应用程序的通信方法
  • 消息队列是一种先进先出的数据结构
  • 消息传递:指的是程序直接通过消息发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是拥有远程调用的技术
  • 引入消息队列的原因:
    • 不同进程之间传递消息的时候,两个进程之间耦合度过高,一个进程的改变就会引发另外一个进程的改变。为了让它们不会互相干扰,我们需要在两个进程之间抽离出一个模块,两个进程之间传递的消息通过消息队列来传递。单独修改某一个进程不会影响另外一个。
    • 某个进程一下子接受的消息太多了,无法马上处理好,就需要对接受的消息进行排队,所以有了消息队列
    • 我们可以把一些不需要即时返回而且又耗费时间的操作提取出来,进行异步处理,可以节省服务器的请求响应时间,从而提高了系统的吞吐量。

消息队列应用场景

消息中间件主要作用


  • 异步处理
  • 解耦服务
  • 流量削峰

应用解耦


  • 传统的模式会出现耦合的情况
  • 通过中间件模式,可以进行解耦的作用

异步处理


  • 场景说明:用户注册以后,需要发送注册邮件和注册短信,传统的方式有两种:串行方式和并行的方式。

  • 串行方式:


    • 把注册信息写到数据库中后,发送注册邮件,再发送注册短信,这三个认为全部完成以后才返回给客户端。但是有个地方要注意,邮件和短信并不是必须的,它只是一个通知,这种方式会导致客户端在等一些没有必要等待的东西。
  • 并行方式:


    • 把注册信息写到数据库中后,发送邮件的同时,发送短信,这三个认为任务完成后返回给客户端,并行的方式可以提高处理的事件时间
    • 虽然并行的方式可以提高效率,但是因为短信和邮件对于我们正常使用网站来说是没有影响的,所以客户端并不需要等到它发送完成以后才显示注册成功,应该是写入数据库中后就可以返回。
  • 消息队列:


    • 引入消息队列以后,把发送短信,邮件等不是必须的业务逻辑进行异步处理
    • 引入消息队列以后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计)

流量削峰(削峰填谷)


  • 流量削峰一般在秒杀活动中应该广泛,因为秒杀活动一般会因为流量过大,导致应用挂掉,为了解决这个问题,我们一般需要加入消息队列
  • 传统模式:在下单的时候就会往数据库中添加数据,但是如果并发量过高的话,就可能导致宕机。
  • 如果说消息被MQ保存起来,然后系统可以按照自己的消费能力来消费,比如每秒1000个数据,这样慢慢写入到数据库中,就不会导致数据库卡死了
  • 系统慢慢的按照数据库能够处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

QPS,PV,UV,PR概念


  • QPS
    • QPS:每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
    • 因特网经常用每秒查询率来衡量域名系统服务器的机器的性能
    • QPS=并发量/平均响应时间
  • PV:Page View,网页浏览量。网页被读者调用浏览的次数。网页每次打开或刷新一次页面,记录一次。用户对同一页面的多次访问,访问量累计。
  • UV (Unique Visitor,独立访客访问数)
    统计1天内访问某站点的用户数(以 COOKIE 为依据),一台电脑终端为一个访客。
  • PR:PageRank,网页的级别技术,用来标识网页的等级/重要性。级别从1到10.PR越高,说明这个网页越受欢迎

AMQP和JMS
  • MQ是消息通信的模型,实现MQ大致有两种主流方式:AMQP、JMS
  • AMQP是一种高级消息队列协议(Advanced Message Queuing Protocol),更准确的说是一种链接协议。这是和JMS的 本质区别,AMQP不和API层进行限定,而是直接定义网络交换的数据格式
  • JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台关于面向消息中间件(MOM)的API,用在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。
  • 二者的区别
    • JMS是定义了统一的接口,来对消息进行操作统一;AMQP是通过规定协议来统一数据交互的格式
    • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,是跨语言的
    • JMS规定了两种消息模式;二AMQP的消息模式更加丰富。

消息队列产品


常用6种消息队列介绍和对比


RabbitMQ核心概念 架构原理


  • Broker :接收和分发消息的应用, RabbitMQ Server 就是 Message Broker
  • Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个 vhost ,每个用户在自己的 vhost 创建 exchange / queue 等
  • Connection: publisher / consumer 和 broker 之间的 TCP 连接
  • Channel :如果每一次访问 RabbitMQ 都建立一个 Connection ,在消息量大的时候建立 TCP连接 的开销将是巨大的,效率也较低。 Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯, AMQP method 包含了 channel id 帮助客 户端和 message broker 识别 channel ,所以 channel 之间是完全隔离的。 Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP 连接 的开销
  • Exchange: message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key ,分发消息到 queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout(multicast)
  • Queue: 消息最终被送到这里等待 consumer 取走
  • Binding : exchange 和 queue 之间的虚拟连接, binding 中可以包含 routing key , Binding 信息被保 存到 exchange 中的查询表中,用于 message 的分发依据

推荐阅读
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • Java队列机制深度解析与应用指南
    Java队列机制在并发编程中扮演着重要角色。本文深入解析了Java队列的各种实现类及其应用场景,包括`LinkedList`、`ArrayBlockingQueue`和`PriorityQueue`等,并探讨了它们在高并发环境下的性能表现和适用场景。通过详细分析这些队列的内部机制和使用技巧,帮助开发者更好地理解和应用Java队列,提升系统的设计和架构能力。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 在软件开发领域,“池”技术被广泛应用,如数据库连接池、线程池等。本文重点探讨Java中的线程池ThreadPoolExecutor,通过详细解析其内部机制,帮助开发者理解如何高效利用线程池管理任务执行。线程池不仅能够显著减少系统资源的消耗,提高响应速度,还能通过合理的配置,如饱和策略,确保在高负载情况下系统的稳定性和可靠性。文章还将结合实际案例,展示线程池在不同应用场景下的具体实现与优化技巧。 ... [详细]
  • 本文深入解析了Storm框架中的ISpout架构及其应用。ISpout接口定义了七个核心方法,包括`open`方法,该方法在Spout初始化时被调用,用于设置Spout的配置参数、上下文环境和输出收集器。通过详细探讨这些方法的功能和实现细节,本文旨在帮助开发者更好地理解和优化Spout组件在实时数据处理中的性能和可靠性。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
author-avatar
Echocc07
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有